
package bean.reflection.indexed;

import java.beans.IndexedPropertyDescriptor;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

/**
 * Test invoking read method of indexed property<br>
 * <br>
 * Copyright: Copyright (c) 2001-2007<br>
 * Company: 一零四資訊科技股份有限公司
 * 
 * @author Eric.Kao(eric.kao@104.com.tw)
 * @version 1.0
 */
public class TestInvokeReadMethod
{
	public TestInvokeReadMethod()
		throws Exception
	{
		ComplexBean bean = new ComplexBean();

		PropertyDescriptor[] descriptors = Introspector.getBeanInfo( bean.getClass() ).getPropertyDescriptors();

		for( int i = 0; i < descriptors.length; i++ )
		{
			PropertyDescriptor descriptor = descriptors[ i ];

			// 取得 Property 為 Index, 在這裏只有 name 為 index property, 在 ComplexBean.java 宣告如下:
			// getName( int index ) 和 setName( int idx, String name )
			if( descriptor instanceof IndexedPropertyDescriptor && descriptor.getName().equals( "name" ) )
			{
				IndexedPropertyDescriptor ipd = ( IndexedPropertyDescriptor )descriptor;

				Method ipdReadMethod = ipd.getIndexedReadMethod();

				// 啟動 method, 並傳入參數, 取得陣列第二元素
				Object[] args =
					{ new Integer( 1 ) };

				Object returnValue = ipdReadMethod.invoke( bean, args );

				String name = ( String )returnValue;

				System.out.println( "Name:" + name );
			}
		}
	}

	public static void main( String[] args )
	{
		try
		{
			new TestInvokeReadMethod();
		}
		catch( Exception ex )
		{
			ex.printStackTrace();
		}
	}
}
